// 认证工具类
class AuthManager {
	// 检查是否已登录
	static isLoggedIn() {
		const token = uni.getStorageSync('admin_token')
		return !!token
	}
	
	// 获取存储的用户信息
	static getUserInfo() {
		return uni.getStorageSync('admin_userInfo') || null
	}
	
	// 获取token
	static getToken() {
		return uni.getStorageSync('admin_token') || ''
	}
	
	// 清除登录信息
	static logout() {
		uni.removeStorageSync('admin_token')
		uni.removeStorageSync('admin_userInfo')
		uni.removeStorageSync('login_attempts')
	}
	
	// 验证token有效性
	static async validateToken() {
		const token = this.getToken()
		if (!token) {
			return { valid: false, needLogin: true }
		}
		
		try {
			const result = await uniCloud.callFunction({
				name: 'checkAuth',
				data: { token }
			})
			
			if (result.result.success) {
				return { valid: true, userInfo: result.result.data.userInfo }
			} else {
				if (result.result.needLogin) {
					this.logout()
				}
				return { valid: false, needLogin: result.result.needLogin, message: result.result.message }
			}
		} catch (error) {
			console.error('Token验证失败:', error)
			return { valid: false, needLogin: true, message: '认证服务异常' }
		}
	}
	
	// 重定向到登录页
	static redirectToLogin() {
		uni.reLaunch({
			url: '/pages/login/login'
		})
	}
	
	// 页面认证守卫
	static async pageAuthGuard() {
		if (!this.isLoggedIn()) {
			this.redirectToLogin()
			return false
		}
		
		const validation = await this.validateToken()
		if (!validation.valid) {
			uni.showToast({
				title: validation.message || '登录已过期，请重新登录',
				icon: 'none'
			})
			setTimeout(() => {
				this.redirectToLogin()
			}, 1500)
			return false
		}
		
		return true
	}
}

// 页面认证混入
export const authMixin = {
	async onLoad() {
		// 检查页面是否需要认证
		const needAuth = this.$options.needAuth !== false // 默认需要认证
		if (needAuth) {
			const isAuthed = await AuthManager.pageAuthGuard()
			if (!isAuthed) {
				return // 认证失败，已重定向到登录页
			}
		}
		
		// 如果页面定义了原始的onLoad方法，调用它
		if (this.$options.originalOnLoad) {
			this.$options.originalOnLoad.call(this, ...arguments)
		}
	}
}

export default AuthManager
